package com.pdh.dao.imp;

import com.pdh.dao.BaseAdminDao;
import com.pdh.exception.UnHandleException;
import com.pdh.util.DruidUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @Author: 彭德华
 * @Date 2021-08-29 22:19
 */
public class AdminDaoMysql extends DruidUtil implements BaseAdminDao {
    //更新数据库中存储的登陆时间 三个预编译参数
    private static final String SQL_LOGIN = "SELECT ADMIN_PHONE FROM EXPRESS_ADMIN WHERE ADMIN_NAME=? AND PASSWORD=?";
    private static final String SQL_UPDATE_LOGIN_INFO = "UPDATE EXPRESS_ADMIN SET LOGIN_TIME=NOW(),LOGIN_IP=INET6_ATON(?),STATUS=? WHERE ADMIN_NAME=?";

    //把连接对象、sql编译对象和结果集向上抽取
    Connection conn = getConnection();
    PreparedStatement state = null;
    ResultSet resultSet = null;

    @Override
    public String login(String adminName, String password) throws UnHandleException {
        //1.获取连接
        conn = getConnection();
        //2.预编译sql语句
        try {//try/catch更有利于释放资源
            state = conn.prepareStatement(SQL_LOGIN);//体验命名规范
            //3.填充参数
            state.setString(1,adminName);
            state.setString(2,password);
            //4.执行
            resultSet = state.executeQuery();
            //5.根据查询结果返回true/false 是否查询到
            if(resultSet.next()) {
                return resultSet.getString("admin_phone");
            }
        } catch (SQLException e) {
            //抛出未收录的异常，之后还可以编写异常处理
            throw new UnHandleException(e.getMessage());
        }finally {
            //5.释放资源
            close(conn,state,resultSet);
        }
        return null;
    }

    @Override
    public boolean updateLoginInformation(String adminName, String ip) throws UnHandleException {
        //1.获取连接
        conn = getConnection();
        //2.预编译sql语句
        try {//try/catch更有利于释放资源
            state = conn.prepareStatement(SQL_UPDATE_LOGIN_INFO);//体验命名规范
            //3.填充参数
            state.setString(1,ip);
            state.setInt(2,1);//0未登录 1已登陆
            state.setString(3,adminName);
            //4.执行
            int row = state.executeUpdate();//不需要获取结果 学框架以后可以更多的去关注这些东西使得项目数据更加稳健
            return row>0?true:false;
        } catch (SQLException e) {
            //抛出未收录的异常，之后还可以编写异常处理
            throw new UnHandleException(e.getMessage());
        }finally {
            //5.释放资源
            close(conn,state,null);
        }
    }
}
